var informacionProductos = [];
var idComercioBuscado;

$(document).ready(function(){

	// Cargamos en el selector todos los id de comercios que tengamos en la base de datos
    cargarSelectorComercios();
    // Ocultamos la tabla
    $('#contenedor_tabla_productos').hide();
    oyentesBotonesTabla();

	window.PixelAdmin.start(init);

/****************************************** TABLA PRODUCTOS *************************************/
	
	$('#contenedor_tabla_productos').jtable({
		title: 'Productos',
		paging: true, //Enable paging
        pageSize: 20, //Set page size (default: 10)
        sorting: true, //Enable sorting
        multiSorting: true,
        defaultSorting: 'idProducto ASC', //Set default sorting
		actions: {
				listAction: function (postData, jtParams) {
                    return $.Deferred(function ($dfd) {
                        $.ajax({
                        	url: '../../php/productos/operacionesTablaProductos.php',
	                        type: 'POST',
	                        dataType: 'json',
	                        data: crearPeticionJsonTablaProductos(jtParams.jtStartIndex, jtParams.jtPageSize, jtParams.jtSorting, postData),
                            success: function (data) {
                                $dfd.resolve(data);
                                añadirProductos(data.Records);
                            },
                            error: function (data) {
                            	console.log(data);
                                $dfd.reject();
                            }
                        });
                    });
                },
                updateAction: function(postData) {
                    return $.Deferred(function ($dfd) {
                        $.ajax({
                            url: '../../php/productos/operacionesTablaProductos.php',
	                        type: 'POST',
	                        dataType: 'json',
	                        data: crearPeticionJsonActualizarProductos(postData),
                            success: function (data) {
                                $dfd.resolve(data);
                            },
                            error: function (data) {
                                $dfd.reject();
                                console.log(data)
                            }
                        });
                    });
                }
		},
		fields: {
			idComercio: {
				create: false,
				edit: false,
				list: false,
			},
			imagen: {
				title: 'Imágen',
				width: '15%',
				sorting: false,
				display: function (data) {
					// Le añadimos la etiqueta imagen para que se pinte así
					return '<img  src="data:image/png;base64,' + data.record.imagen + '"width="150px"; height="100px;"/>';
			    }
			},
			idProducto: {
				key: true,
				title: 'Identificador',
				width: '10%',
				listClass: 'campoCentrado',
				display: function (data) {
					// Le añadimos la cadena 'id_' por cuestión de estética
					return 'id_' + data.record.idProducto;
			    }
			},
			descripcion: {
				title: 'Descripción',
				width: '40%',
				sorting: false,
			},
			precio: {
				title: 'Precio',
				width: '10%',
				listClass: 'campoCentrado',
				sorting: false,
                display: function (data) {
                    return data.record.precio + " €";
                }
			},
			iva: {
				title: 'IVA',
				width: '10%',
				listClass: 'campoCentrado',
				sorting: false,
                display: function (data) {
                    return data.record.iva + " €";
                }
			},
			descuento: {
				title: 'Descuento',
				width: '10%',
				listClass: 'campoCentrado',
				sorting: false,
                display: function (data) {
                    return data.record.descuento + " €";
                }
			},
			estado: {
				title: 'Estado',
				width: '5%',
				display: function (data) {
					// Vemos el estado del producto para elegir el color de la etiqueta
					if (data.record.estado == "Activo") {
                        var $estado = $('<div align="center" id="' + data.record.idProducto + '"<a href="#" class="label label-success">&nbsp;' + data.record.estado + '&nbsp;</a></div>');
                        $estado.click(onClickCambiarEstadoProducto);
                        return $estado;
                    }else if (data.record.estado == "Inactivo") {
                        var $estado = $('<div align="center" id="' + data.record.idProducto + '"<a href="#" class="label label-warning">' + data.record.estado + '</a></div>');
						$estado.click(onClickCambiarEstadoProducto);
						return $estado;
					}else{
						var $estado = $('<div align="center" id="' + data.record.idProducto + '"<a href="#" class="label label-danger">' + data.record.estado + '</a></div>');
						$estado.click(onClickCambiarEstadoProducto);
						return $estado;
					}
			    }
			},
			editar:{
				title: '',
				width: '5%',
				sorting: false,
				display: function (data) {
					var $editar = $('<div align="center" class="botonesEditaEliminar" id="' + data.record.idProducto + '"><i class="fa fa-edit text-default text-lg"></i></div>');
					$editar.click(onClickEditarProducto);
					return $editar;
			    }
			},
			eliminar:{
				title: '',
				width: '5%',
				sorting: false,
				display: function (data) {
					var $eliminar = $('<div align="center" class="botonesEditaEliminar" id="' + data.record.idProducto + '"><i class="fa fa-trash-o text-default text-lg"></i></div>');
			    	$eliminar.click(onClickEliminarProducto);
					return $eliminar;
			    }
			}
		}
	});
});

// Método encargado de relaizar el post para que se envíen el id de todos los comercios
function cargarSelectorComercios(){
    enviarPeticionListarIdTodosComercios();
}

function enviarPeticionListarIdTodosComercios(){
    datosEnvioPeticionIdTodosComercios = {};
    datosEnvioPeticionIdTodosComercios.accion = 'listarIdTodosComercios';
    datosEnvioPeticionIdTodosComercios.tipoFormulario = 'tabla_comercios';
    datosEnvioPeticionIdTodosComercios.tokenCSRF = $('#comercios_tabla_token_CSRF').val();
    
    // Realizamos la peticion POST con el JSON de parametro
    $.post("../../php/comercios/operacionesTablaComercios.php", {datosPostComercios: JSON.stringify(datosEnvioPeticionIdTodosComercios)}, callbackPeticionIdTodosComerciosExito).fail(failPostPeticionIdTodosComercios);
}

function callbackPeticionIdTodosComerciosExito(resultado){
    var idTodosComercios = JSON.parse(resultado)['idTodosComercios'];
    var selector = '';

    i = 0;
    // Recorremos todos los id de comercios y vamos creando la carga del selector
    while (i<idTodosComercios.length){
        selector += '<option value="' + idTodosComercios[i]['idComercio'] + '">' + idTodosComercios[i]['idComercio'] +'</option>';
        i++;
    }

    // Cargamos el selector
    $('#selector_comercios').empty();
    $('#selector_comercios').append(selector);
}

function failPostPeticionIdTodosComercios(data){
    $.growl.notice({ title:"Fallo al cargar", message: "Se ha producido un fallo al cargar el identificador de los comercios. Inténtelo de nuevo más tarde." });
    console.log(data);
}

  /* -------------------------
    |  OYENTES BOTONES TABLA  |
     ------------------------- */

function oyentesBotonesTabla() {

    $('#mostrar_tabla_historico').click(function(event) {
        $('#contenedor_tabla_productos').show();
        idComercioBuscado = $('#selector_comercios').val();
        $('#contenedor_tabla_productos').jtable('load',{ filtroConsulta: idComercioBuscado});
    });

    $('#selector_comercios').click(function(event) {
        $('#contenedor_tabla_productos').hide();
    });
}

// Método encargado de añadir productos al array de productos para poder trabajar posteriormente con ellos
function añadirProductos(productos){
	for (var i=0; i<productos.length; i=i+1){
		producto = [];
		producto.idProducto = productos[i].idProducto;
		producto.producto = productos[i];
 		informacionProductos.push(producto); 
	}
}

// Método encargado de realizar el post correspondiente para listar los productos en la tabla
function crearPeticionJsonTablaProductos(inicio, tamPagina, ordenacion, idComercio){
    informacionJson = {};
    datosPeticionProductos = {};
    datosPeticionProductos.accion = 'listarProductosAdministracion';
    datosPeticionProductos.tipoFormulario = 'tabla_productos';
    datosPeticionProductos.tokenCSRF = $('#ver_productos_tabla_token_CSRF').val();
	datosPeticionProductos.inicio = inicio; 
	datosPeticionProductos.tamPagina = tamPagina; 
    datosPeticionProductos.ordenacion = ordenacion;
    datosPeticionProductos.idComercio = idComercio.filtroConsulta;    
    informacionJson.datosPostVerProductos = datosPeticionProductos;
    informacionJson.peticionAjax = 'SI';
    return informacionJson;
}

// Método encargado de realizar el post correspondiente para actualziar los productos en la tabla
function crearPeticionJsonActualizarProductos(datosActualizar){
    informacionJson = {};
    datosPeticionProductos = {};
    datosPeticionProductos.accion = 'actualizarProductosAdministracion';
    datosPeticionProductos.tipoFormulario = 'tabla_productos';
    datosPeticionProductos.tokenCSRF = $('#ver_productos_tabla_token_CSRF').val();  
    datosPeticionProductos.datosActualizar = datosActualizar;
    datosPeticionProductos.idComercio = idComercioBuscado;    
    informacionJson.datosPostVerProductos = datosPeticionProductos;
    informacionJson.peticionAjax = 'SI';

    return informacionJson;
}

// Método encargado de realizar el post para cambiar el estado de un producto
function onClickCambiarEstadoProducto(){
    // Obtenemos el idComercio y el idProducto del label del atributo id
    idProducto = $(this).attr('id');

    datosProductoActualizar = {};
    record = {};
    record.actualizarEstado = 'Si';
    record.idProducto = idProducto;
    record.estado = cambiaEstadoProductoDadoIdProducto(idProducto);
    datosProductoActualizar.record = record;

    // Enviamos la petición al servidor
    $('#contenedor_tabla_productos').jtable('updateRecord', datosProductoActualizar);
}

// Método encargado de realizar el post para editar un producto
function onClickEditarProducto(){
    // Obtenemos el idComercio y el idProducto del label del atributo id
    idProducto = $(this).attr('id');

    $.growl.error({ title:"Funcionalidad no disponible", message: "Esta funcionalidad no está disponible para la versión beta." });
}

// Método encargado de eliminar un producto
function onClickEliminarProducto(){
   	// Obtenemos el idCabecera del name del icono
	$idProducto = $(this).attr('id');
    // Enviamos Post al Servidor
    enviarPeticionEliminarProducto($idProducto);
}

function enviarPeticionEliminarProducto(idProducto){
    datosEnvioPeticionEliminarProducto = {};
    datosEnvioPeticionEliminarProducto.accion = 'eliminarProductoAdministracion';
    datosEnvioPeticionEliminarProducto.tipoFormulario = 'tabla_productos';
    datosEnvioPeticionEliminarProducto.tokenCSRF = $('#ver_productos_tabla_token_CSRF').val();
    datosEnvioPeticionEliminarProducto.idProducto = idProducto;
    datosEnvioPeticionEliminarProducto.idComercio = idComercioBuscado;    

    // JSON.stringfy(obj) transforma un objeto a una cadena de texto
    // JSON.parse(cadena) transforma una cadena en un objeto
    // Realizamos la peticion POST con el JSON de parametro
    $.post("../../php/productos/operacionesTablaProductos.php", {datosPostVerProductos: JSON.stringify(datosEnvioPeticionEliminarProducto)}, callbackPeticionEliminarProductoExito).fail(failPostPeticionEliminarProducto);
}

function callbackPeticionEliminarProductoExito(data){
	// Actualizamos la tabla para que se vea reflejado
	$('#contenedor_tabla_productos').jtable('reload');
    if(data['Mensaje'] == 'Producto borrado'){
        // Notificamos que se ha eliminado el producto con éxito de forma permanente
        $.growl.notice({ title:"Producto eliminado", message: "El producto ha sido eliminado de forma permanente." });
    }else{
        // Notificamos que no se ha eliminado el producto ya que tiene operaciones realizadas
        $.growl.error({ title:"Producto no eliminado", message: "El producto no se ha podido eliminar ya que tiene opraciones asociadas." });
    }
}

function failPostPeticionEliminarProducto(data){
	console.log(data);
}

/************************************* FUNCIONES ARRAY PRODUCTOS *************************************/

function cambiaEstadoProductoDadoIdProducto(idProducto){
	i = 0;
	encontrado = false;
	while (i<informacionProductos.length && encontrado == false){
		// Vemos si es el producto que buscamos
		if(informacionProductos[i].idProducto === idProducto){
			encontrado = true;
            // Vemos si había sido eliminado del comercio y lo quieren recuperar
            if(informacionProductos[i].producto.estado == 'Borrado'){
                $.growl.notice({ title:"Producto restaurado", message: "El producto ha sido restaurado para el comercio." });
                informacionProductos[i].producto.estado = "Inactivo";
                return 'Inactivo';
            }else{
                // Vemos su estado y lo invertimos
                if(informacionProductos[i].producto.estado == 'Activo'){
                    informacionProductos[i].producto.estado = "Inactivo";
                    return 'Inactivo';
                }else if(informacionProductos[i].producto.estado == 'Inactivo'){
                    informacionProductos[i].producto.estado = "Activo";
                    return 'Activo';
                }
            }
		}else{
			i++;
		}
	}
}




